
 1000  *SAVE PUTNEYS.8X8
 1010  *--------------------------------
 1020  *      ULTRA-FAST 8 X 8 MULTIPLY
 1030  *--------------------------------
 1040  *   ENTER WITH (A)=MULTIPLIER # 1
 1050  *              (X)=MULTIPLIER #2
 1060  *   EXIT WITH (A)=PRODUCT HI BYTE
 1070  *             (X)=PRODUCT LO BYTE
 1080  *--------------------------------
 1090  *   TIMING DATA
 1100  *      MINIMUM TIME = 54 CYCLES
 1110  *      MAXIMUM TIME = 60 CYCLES
 1120  *      AVERAGE TIME = 57 CYCLES
 1130  *--------------------------------
 1140  PROD   .EQ $06      PRODUCT TEMP OF M1*M2 (LOW BYTE)
 1150  M2     .EQ $07      TEMP FOR M2 SAVE
 1160  *--------------------------------
 1170         .OR $6000    SAFE PLACE
 1180  *--------------------------------
 1190  *   TEST FOR APPLESOFT DRIVER
 1200  *--------------------------------
 1210  TEST   LDA $FA      LOAD ACC AND X SO BASIC CAN TEST
 1220         LDX $FB
 1230         JSR MULT8
 1240         STX $FA      NOW BASIC CAN CHECK ACC AND X
 1250         STA $FB
 1260         RTS
 1270  *--------------------------------
 1280  MULT8  TAY          SAVE M1 IN Y
 1290         STX M2       SAVE M2
 1300         SEC          SET CARRY FOR SUBTRACT
 1310         SBC M2       FIND DIFFERENCE
 1320         BCS .1       WAS M1 > M2 ?
 1330         EOR #$FF     INVERT IT
 1340         ADC #$01     AND ADD 1
 1350  .1     TAX          USE ABS(M1-M2) AS INDEX
 1360         CLC
 1370         TYA          GET M1 BACK
 1380         ADC M2       FIND M1 + M2
 1390         TAY          USE M1+M2 AS INDEX
 1400         BCC .2       M1+M2 < 255 ?
 1410         LDA SQL+256,Y     FIND SUM SQUARED LOW IF > 255
 1420         SBC SQL,X         SUBTRACT DIFF SQUARED
 1430         STA PROD          SAVE IN PRODUCT
 1440         LDA SQH+256,Y     HI BYTE
 1450         SBC SQH,X
 1460         LDX PROD     GET PROD LOW IN X
 1470         RTS          DONE
 1480  .2     SEC          SET CARRY FOR SUBTRACT
 1490         LDA SQL,Y    FIND SUM OF SQUARES LOW IF < 255
 1500         SBC SQL,X    SUBTRACT DIFF SQUARED
 1510         STA PROD     SAVE IN PRODUCT
 1520         LDA SQH,Y    HI BYTE
 1530         SBC SQH,X
 1540         LDX PROD     GET PROD LOW IN X
 1550         RTS
 1560  *--------------------------------
 1570  *   PROGRAM TO CREATE A TABLE OF SQUARES/4
 1580  *--------------------------------
 1590  LOTP   .EQ 0,1
 1600  HITP   .EQ 2,3
 1610  *--------------------------------
 1620  SQUARE LDY #0
 1630         STY LOTP
 1640         STY HITP
 1650         STY SQ
 1660         STY SQ+1
 1670         STY SQ+2
 1680         STY DELTA+1
 1690         STY DELTA+2
 1700         STY $6800
 1710         STY $6A00
 1720         INY
 1730         LDA #$40
 1740         STA DELTA
 1750         LDA /$6800
 1760         STA LOTP+1
 1770         LDA /$6A00
 1780         STA HITP+1
 1790         LDX #1
 1800  *--------------------------------
 1810  .1     CLC
 1820         LDA DELTA
 1830         ADC SQ
 1840         STA SQ
 1850         LDA DELTA+1
 1860         ADC SQ+1
 1870         STA SQ+1
 1880         STA (LOTP),Y
 1890         LDA DELTA+2
 1900         ADC SQ+2
 1910         STA SQ+2
 1920         STA (HITP),Y
 1930  *--------------------------------
 1940         LDA DELTA
 1950         ADC #$80
 1960         STA DELTA
 1970         BCC .2
 1980         INC DELTA+1
 1990         BNE .2
 2000         INC DELTA+2
 2010  .2     INY
 2020         BNE .1
 2030         INC LOTP+1
 2040         INC HITP+1
 2050         DEX
 2060         BPL .1
 2070         RTS
 2080  *--------------------------------
 2090  DELTA  .BS 3
 2100  SQ     .BS 3
 2110  *--------------------------------
 2120  *   TABLE OF SQUARES/4 FROM 0 TO 511
 2130  *--------------------------------
 2140         .BS *+$FF/$100*$100-*  KEEP TABLES ALIGNED ON PAGE BOUNDARY
 2150  *--------------------------------
 2160  SQL    .DA #0,#0,#1,#2,#4,#6,#9,#12
 2170         .DA #16,#20,#25,#30,#36,#42,#49,#56
 2180         .DA #64,#72,#81,#90,#100,#110,#121,#132
 2190         .DA #144,#156,#169,#182,#196,#210,#225,#240
 2200    .LIF
 2210         .DA #256,#272,#289,#306,#324,#342,#361,#380
 2220         .DA #400,#420,#441,#462,#484,#506,#529,#552
 2230         .DA #576,#600,#625,#650,#676,#702,#729,#756
 2240         .DA #784,#812,#841,#870,#900,#930,#961,#992
 2250         .DA #1024,#1056,#1089,#1122,#1156,#1190,#1225,#1260
 2260         .DA #1296,#1332,#1369,#1406,#1444,#1482,#1521,#1560
 2270         .DA #1600,#1640,#1681,#1722,#1764,#1806,#1849,#1892
 2280         .DA #1936,#1980,#2025,#2070,#2116,#2162,#2209,#2256
 2290         .DA #2304,#2352,#2401,#2450,#2500,#2550,#2601,#2652
 2300         .DA #2704,#2756,#2809,#2862,#2916,#2970,#3025,#3080
 2310         .DA #3136,#3192,#3249,#3306,#3364,#3422,#3481,#3540
 2320         .DA #3600,#3660,#3721,#3782,#3844,#3906,#3969,#4032
 2330         .DA #4096,#4160,#4225,#4290,#4356,#4422,#4489,#4556
 2340         .DA #4624,#4692,#4761,#4830,#4900,#4970,#5041,#5112
 2350         .DA #5184,#5256,#5329,#5402,#5476,#5550,#5625,#5700
 2360         .DA #5776,#5852,#5929,#6006,#6084,#6162,#6241,#6320
 2370         .DA #6400,#6480,#6561,#6642,#6724,#6806,#6889,#6972
 2380         .DA #7056,#7140,#7225,#7310,#7396,#7482,#7569,#7656
 2390         .DA #7744,#7832,#7921,#8010,#8100,#8190,#8281,#8372 
 2400         .DA #8464,#8556,#8649,#8742,#8836,#8930,#9025,#9120
 2410         .DA #9216,#9312,#9409,#9506,#9604,#9702,#9801,#9900
 2420         .DA #10000,#10100,#10201,#10302,#10404,#10506,#10609,#10712
 2430         .DA #10816,#10920,#11025,#11130,#11236,#11342,#11449,#11556
 2440         .DA #11664,#11772,#11881,#11990,#12100,#12210,#12321,#12432
 2450         .DA #12544,#12656,#12769,#12882,#12996,#13110,#13225,#13340
 2460         .DA #13456,#13572,#13689,#13806,#13924,#14042,#14161,#14280
 2470         .DA #14400,#14520,#14641,#14762,#14884,#15006,#15129,#15252
 2480         .DA #15376,#15500,#15625,#15750,#15876,#16002,#16129,#16256
 2490         .DA #16384,#16512,#16641,#16770,#16900,#17030,#17161,#17292
 2500         .DA #17424,#17556,#17689,#17822,#17956,#18090,#18225,#18360
 2510         .DA #18496,#18632,#18769,#18906,#19044,#19182,#19321,#19460
 2520         .DA #19600,#19740,#19881,#20022,#20164,#20306,#20449,#20592
 2530         .DA #20736,#20880,#21025,#21170,#21316,#21462,#21609,#21756
 2540         .DA #21904,#22052,#22201,#22350,#22500,#22650,#22801,#22952
 2550         .DA #23104,#23256,#23409,#23562,#23716,#23870,#24025,#24180
 2560         .DA #24336,#24492,#24649,#24806,#24964,#25122,#25281,#25440
 2570        .DA #25600,#25760,#25921,#26082,#26244,#26406,#26569,#26732
 2580        .DA #26896,#27060,#27225,#27390,#27556,#27722,#27889,#28056
 2590        .DA #28224,#28392,#28561,#28730,#28900,#29070,#29241,#29412
 2600        .DA #29584,#29756,#29929,#30102,#30276,#30450,#30625,#30800
 2610        .DA #30976,#31152,#31329,#31506,#31684,#31862,#32041,#32220
 2620        .DA #32400,#32580,#32761,#32942,#33124,#33306,#33489,#33672
 2630        .DA #33856,#34040,#34225,#34410,#34596,#34782,#34969,#35156
 2640        .DA #35344,#35532,#35721,#35910,#36100,#36290,#36481,#36672
 2650        .DA #36864,#37056,#37249,#37442,#37636,#37830,#38025,#38220
 2660        .DA #38416,#38612,#38809,#39006,#39204,#39402,#39601,#39800
 2670        .DA #40000,#40200,#40401,#40602,#40804,#41006,#41209,#41412
 2680        .DA #41616,#41820,#42025,#42230,#42436,#42642,#42849,#43056
 2690        .DA #43264,#43472,#43681,#43890,#44100,#44310,#44521,#44732
 2700        .DA #44944,#45156,#45369,#45582,#45796,#46010,#46225,#46440
 2710        .DA #46656,#46872,#47089,#47306,#47524,#47742,#47961,#48180
 2720        .DA #48400,#48620,#48841,#49062,#49284,#49506,#49729,#49952
 2730        .DA #50176,#50400,#50625,#50850,#51076,#51302,#51529,#51756
 2740        .DA #51984,#52212,#52441,#52670,#52900,#53130,#53361,#53592
 2750        .DA #53824,#54056,#54289,#54522,#54756,#54990,#55225,#55460
 2760        .DA #55696,#55932,#56169,#56406,#56644,#56882,#57121,#57360
 2770        .DA #57600,#57840,#58081,#58322,#58564,#58806,#59049,#59292
 2780        .DA #59536,#59780,#60025,#60270,#60516,#60762,#61009,#61256
 2790        .DA #61504,#61752,#62001,#62250,#62500,#62750,#63001,#63252
 2800        .DA #63504,#63756,#64009,#64262,#64516,#64770,#65025,#65280
 2810  *--------------------------------
 2820     .LIST ON
 2830  SQH    .DA /0,/0,/1,/2,/4,/6,/9,/12
 2840         .DA /16,/20,/25,/30,/36,/42,/49,/56
 2850         .DA /64,/72,/81,/90,/100,/110,/121,/132
 2860    .LIST OFF
 2870         .DA /144,/156,/169,/182,/196,/210,/225,/240
 2880         .DA /256,/272,/289,/306,/324,/342,/361,/380
 2890         .DA /400,/420,/441,/462,/484,/506,/529,/552
 2900         .DA /576,/600,/625,/650,/676,/702,/729,/756
 2910         .DA /784,/812,/841,/870,/900,/930,/961,/992
 2920         .DA /1024,/1056,/1089,/1122,/1156,/1190,/1225,/1260
 2930         .DA /1296,/1332,/1369,/1406,/1444,/1482,/1521,/1560
 2940         .DA /1600,/1640,/1681,/1722,/1764,/1806,/1849,/1892
 2950         .DA /1936,/1980,/2025,/2070,/2116,/2162,/2209,/2256
 2960         .DA /2304,/2352,/2401,/2450,/2500,/2550,/2601,/2652
 2970         .DA /2704,/2756,/2809,/2862,/2916,/2970,/3025,/3080
 2980         .DA /3136,/3192,/3249,/3306,/3364,/3422,/3481,/3540
 2990         .DA /3600,/3660,/3721,/3782,/3844,/3906,/3969,/4032
 3000         .DA /4096,/4160,/4225,/4290,/4356,/4422,/4489,/4556
 3010         .DA /4624,/4692,/4761,/4830,/4900,/4970,/5041,/5112
 3020         .DA /5184,/5256,/5329,/5402,/5476,/5550,/5625,/5700
 3030         .DA /5776,/5852,/5929,/6006,/6084,/6162,/6241,/6320
 3040         .DA /6400,/6480,/6561,/6642,/6724,/6806,/6889,/6972
 3050         .DA /7056,/7140,/7225,/7310,/7396,/7482,/7569,/7656
 3060         .DA /7744,/7832,/7921,/8010,/8100,/8190,/8281,/8372 
 3070         .DA /8464,/8556,/8649,/8742,/8836,/8930,/9025,/9120
 3080         .DA /9216,/9312,/9409,/9506,/9604,/9702,/9801,/9900
 3090         .DA /10000,/10100,/10201,/10302,/10404,/10506,/10609,/10712
 3100         .DA /10816,/10920,/11025,/11130,/11236,/11342,/11449,/11556
 3110         .DA /11664,/11772,/11881,/11990,/12100,/12210,/12321,/12432
 3120         .DA /12544,/12656,/12769,/12882,/12996,/13110,/13225,/13340
 3130         .DA /13456,/13572,/13689,/13806,/13924,/14042,/14161,/14280
 3140         .DA /14400,/14520,/14641,/14762,/14884,/15006,/15129,/15252
 3150         .DA /15376,/15500,/15625,/15750,/15876,/16002,/16129,/16256
 3160         .DA /16384,/16512,/16641,/16770,/16900,/17030,/17161,/17292
 3170         .DA /17424,/17556,/17689,/17822,/17956,/18090,/18225,/18360
 3180         .DA /18496,/18632,/18769,/18906,/19044,/19182,/19321,/19460
 3190         .DA /19600,/19740,/19881,/20022,/20164,/20306,/20449,/20592
 3200         .DA /20736,/20880,/21025,/21170,/21316,/21462,/21609,/21756
 3210         .DA /21904,/22052,/22201,/22350,/22500,/22650,/22801,/22952
 3220         .DA /23104,/23256,/23409,/23562,/23716,/23870,/24025,/24180
 3230         .DA /24336,/24492,/24649,/24806,/24964,/25122,/25281,/25440
 3240        .DA /25600,/25760,/25921,/26082,/26244,/26406,/26569,/26732
 3250        .DA /26896,/27060,/27225,/27390,/27556,/27722,/27889,/28056
 3260        .DA /28224,/28392,/28561,/28730,/28900,/29070,/29241,/29412
 3270        .DA /29584,/29756,/29929,/30102,/30276,/30450,/30625,/30800
 3280        .DA /30976,/31152,/31329,/31506,/31684,/31862,/32041,/32220
 3290        .DA /32400,/32580,/32761,/32942,/33124,/33306,/33489,/33672
 3300        .DA /33856,/34040,/34225,/34410,/34596,/34782,/34969,/35156
 3310        .DA /35344,/35532,/35721,/35910,/36100,/36290,/36481,/36672
 3320        .DA /36864,/37056,/37249,/37442,/37636,/37830,/38025,/38220
 3330        .DA /38416,/38612,/38809,/39006,/39204,/39402,/39601,/39800
 3340        .DA /40000,/40200,/40401,/40602,/40804,/41006,/41209,/41412
 3350        .DA /41616,/41820,/42025,/42230,/42436,/42642,/42849,/43056
 3360        .DA /43264,/43472,/43681,/43890,/44100,/44310,/44521,/44732
 3370        .DA /44944,/45156,/45369,/45582,/45796,/46010,/46225,/46440
 3380        .DA /46656,/46872,/47089,/47306,/47524,/47742,/47961,/48180
 3390        .DA /48400,/48620,/48841,/49062,/49284,/49506,/49729,/49952
 3400        .DA /50176,/50400,/50625,/50850,/51076,/51302,/51529,/51756
 3410        .DA /51984,/52212,/52441,/52670,/52900,/53130,/53361,/53592
 3420        .DA /53824,/54056,/54289,/54522,/54756,/54990,/55225,/55460
 3430        .DA /55696,/55932,/56169,/56406,/56644,/56882,/57121,/57360
 3440        .DA /57600,/57840,/58081,/58322,/58564,/58806,/59049,/59292
 3450        .DA /59536,/59780,/60025,/60270,/60516,/60762,/61009,/61256
 3460    .LIST ON
 3470        .DA /61504,/61752,/62001,/62250,/62500,/62750,/63001,/63252
 3480        .DA /63504,/63756,/64009,/64262,/64516,/64770,/65025,/65280
 3490  *--------------------------------
 3500    .LIF

